
/**
* \file	Symbol.h
* \author	Caio Arce Nishibe (caionishibe@gmail.com)
* \date	August, 2014
* \brief	Symbol header.
*/

#ifndef __SYMBOL_H
#define __SYMBOL_H

#include "Common.h"
#include <string>

using namespace std;

/**
* \brief	Represent a symbol.
* \author	Caio Arce Nishibe (caionishibe@gmail.com)
* \date	August, 2014
*/

class Symbol
{
public:
	/**
	 * \brief symbol name
	 */
	string name;
	/*
	 * \brief value type
	 */
	Type type;
	/**
	 * \brief symbol value
	 */
	Value value;
	/**
	 * \brief symbol owner (scope)
	 */
	string owner;
	/**
	 * \brief symbol declaration line
	 */
	int lineNumber;
	/**
	 * \brief pointer to the next symbol
	 */
	Symbol *next;

	/**
	 * \brief Default constructor
	 */
	Symbol();

	/**
	 * \brief constructor
	 * \param name symbol name
	 * \param type value type
	 * \param value symbol value
	 * \param owner symbol owner (scope)
	 * \param lineNumber declaration line
	 */
	Symbol(string name, Type type, Value value, string owner, int lineNumber);
	/**
	 * \brief Destructor
	 */
	~Symbol();


};



#endif